#include <stdio.h>
#include <stdlib.h>
#include "Personnel.h"
#include "menu_personnel.h"
#define capacity 100
#include <string.h>


int longueur_per(int valeur)
{
	int l= 0;

	while(valeur !=0)
	{
		l++;
		valeur = valeur / 10;
	}
 return l;
}

void saisir_personnel(personnel *per)
{
int valeur;
int l=0;
int l1=0;
int l2=0;
char ch_sexe1[20]= "masculin";
char ch_sexe2[20]= "feminin";
char ch_poste1[20]= "medecin";
char ch_poste2[20]= "infirmier";

do {
printf("Saisir CIN \n");
scanf("%ld",&per->cin);
l=longueur_per(per->cin);
}
while ((l!=8) || (per->cin <0));
printf("Saisir Nom \n");fflush(stdin);
scanf("%s",per->nom);
printf("Saisir Prenom \n");fflush(stdin);
scanf("%s",per->prenom);
do
{
printf("Saisir Age \n");
scanf("%d",&per->age);
} while (per->age<0);
do
{
printf("Choisir sexe: feminin/masculin \n");fflush(stdin);
scanf("%s",per->sexe);
} while ((strcmp(per->sexe,ch_sexe1)!=0)&&(strcmp(per->sexe,ch_sexe2)!=0));
do {
printf("Saisir Numero de telephone \n");
scanf("%ld",&per->numero_telephone);
l=longueur_per(per->numero_telephone);
}
while ((per->numero_telephone<0) || (l!=8));
printf("Saisir adresse \n");fflush(stdin);
scanf("%s",per->adresse);
do {
printf("Saisir identifiant ID \n");
scanf("%d",&per->ID);
l=longueur_per(per->ID);
 }
while ((per->ID<0) || (l!=4));
do
{
printf("Choisir le poste: medecin/infirmier \n");fflush(stdin);
scanf("%s",per->poste);
} while ((strcmp(per->poste,ch_poste1)!=0)&&(strcmp(per->poste,ch_poste2)!=0));
do {
printf("Donnez la date d'embauche: jour mois annee \n");
scanf("%d %d %d",&(per->date_d_embauche.jour),&(per->date_d_embauche.mois),&(per->date_d_embauche.annee));
l=longueur_per(per->date_d_embauche.jour);
l1=longueur_per(per->date_d_embauche.mois);
l2=longueur_per(per->date_d_embauche.annee);
}
while ((per->date_d_embauche.jour<0)||(per->date_d_embauche.jour>31)||(l!=2)||(per->date_d_embauche.mois<0)||(per->date_d_embauche.mois>12)||(l1!=2)||(per->date_d_embauche.annee<0)||(l2!=4));

}

void enregistrer_personnel(char fichier[], personnel *per)
{
   saisir_personnel(per);
  FILE *f;
  f=fopen(fichier,"ab");
  if (f!=NULL){
  fwrite(per,sizeof(personnel),1,f);}
  fclose(f);
}

void lister_personnel(char fichier[])
{
FILE *f;
personnel p;
int i=1;  
  f=fopen(fichier,"rb");
  if (f!=NULL){
  while(fread(&p,sizeof(personnel),1,f)!=0)
printf("\n Personnel n:%d \n ID= %d \n CIN= %ld \n Nom=  %s \n Prenom= %s \n Age= %d \n Sexe= %s \n Num_tel= %ld \n Adresse= %s \n  poste= %s \n Date_d'embauche = : %d %d %d \n \n ",i,p.ID,p.cin,p.nom,p.prenom,p.age,p.sexe,p.numero_telephone,p.adresse,p.poste,
p.date_d_embauche.jour,p.date_d_embauche.mois,p.date_d_embauche.annee);
 i++;} fclose(f);
}

int chercher_personnel(char fichier[],char nom[],int ID)
{
    int res=0;
  FILE *f;
personnel p;
  printf("donner le nom cherché \n");
  scanf ("%s",nom);
  printf("donner son ID \n");
  scanf ("%d",&ID);
  f=fopen(fichier,"rb");
  if (f!=NULL){
  while(fread(&p,sizeof(personnel),1,f)!=0 && res==0)
{
	if((strcmp(p.nom,nom)==0)&&(ID==p.ID))
	res=1;
 }
}
if (res==1)
 {printf("\nID= %d \n CIN= %ld \n Nom=  %s \n Prenom= %s \n Age= %d \n Sexe= %s \n Num_tel= %ld \n Adresse= %s \n  poste= %s \n Date_d'embauche = : %d %d %d \n \n ",p.ID,p.cin,p.nom,p.prenom,p.age,p.sexe,p.numero_telephone,p.adresse,p.poste,
p.date_d_embauche.jour,p.date_d_embauche.mois,p.date_d_embauche.annee);}
 fclose(f);
  return res;
}

void modifier_personnel( char fichier[])
{
char tmp[]="tmp.txt";
FILE *f ;
FILE *t ;
personnel p;
int ID;
printf("\n donner l'ID du personnel que vous voulez modifier:\n");
scanf("%d", &ID);
f=fopen(fichier,"rb") ;
t=fopen(tmp,"wb") ;
if (f!= NULL && t!=NULL)
{
while(fread(&p,sizeof(personnel),1,f)!=0)
{
if( ID!=p.ID)
{ fwrite(&p,sizeof(personnel),1,t) ;
}
if (ID==p.ID){
saisir_personnel(&p);
fwrite(&p,sizeof(personnel),1,t) ;
}

}
}
printf("les coordonnes du personnel sont modifiés\n");
fclose(f) ;
fclose(t) ;
f=fopen(fichier,"wb") ;
t=fopen(tmp,"rb") ;
while(fread (&p,sizeof(personnel),1,t)!=0)
{fwrite(&p,sizeof(personnel),1,f) ;}
fclose(f) ;
fclose(t) ;
}
void supprimer_personnel( char fichier[])
{
char tmp[]="tmp.txt";
FILE *f ;
FILE *t ;
personnel p;
int ID;
printf("\n donner l'ID du personnel que vous voulez supprimer:\n");
scanf("%d", &ID);
f=fopen(fichier,"rb") ;
t=fopen(tmp,"wb") ;
if (f!= NULL && t!=NULL)
{
while(fread(&p,sizeof(personnel),1,f)!=0)
{
if( ID!=p.ID)
{ fwrite(&p,sizeof(personnel),1,t) ;
}
}
}

printf("le personnel est supprimé\n");
fclose(f) ;
fclose(t) ;
f=fopen(fichier,"wb") ;
t=fopen(tmp,"rb") ;
while(fread (&p,sizeof(personnel),1,t)!=0)
{fwrite(&p,sizeof(personnel),1,f) ;}
fclose(f) ;
fclose(t) ;
}


void gestion_personnel() {
	personnel p[capacity];
	int n = 0;
	int choix;
	char fichier[capacity]="fichier_personnel";
	char nom[30];
	int res;
	int ID;
do {
afficher_menu_per();
choix=choix_menu_per();


	switch (choix) {
	case 1: 
  	enregistrer_personnel(fichier,p);
	break;
	case 2:
	lister_personnel(fichier);
	break;
	case 3:
	res=chercher_personnel(fichier,nom,ID);
	if (res==1)
	{printf(" %s existe \n",nom);}
	else {printf(" %s n'existe pas \n",nom);}
	break;
	case 4: supprimer_personnel(fichier);
	break;
	case 5: modifier_personnel(fichier);
	break;
	case 0:  printf("\n Retour au menu principal \n");break; break;
	default: printf("\n mauvais choix \n");
}
} while (choix!=0) ;

}


